// Copyright (C) 2016 The V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-arraybuffer.isview
description: >
  `isView` can be invoked as a function
info: |
  24.1.3.1 ArrayBuffer.isView ( arg )

  1. If Type(arg) is not Object, return false.
  2. If arg has a [[ViewedArrayBuffer]] internal slot, return true.
  3. Return false.
features: [TypedArray, DataView]
includes: [testTypedArray.js]
---*/

function Test() {
    var isView = ArrayBuffer.isView;

    testWithTypedArrayConstructors(function(ctor) {
      var sample = new ctor();
      assert.sameValue(isView(sample), true, "instance of TypedArray");
    });

    var dv = new DataView(new ArrayBuffer(1), 0, 0);
    assert.sameValue(isView(dv), true, "instance of DataView");

    assert.sameValue(isView(), false, "undefined arg");
    assert.sameValue(isView({}), false, "ordinary object");
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
